package com.zeus.core.rule;

import com.zeus.common.utils.TimeUtils;
import com.zeus.core.context.ZeusContext;

/**
 * 聚合规则-阈值-时间为主
 * 0、如配置时间为1分钟，阈值次数为10 为例子
 * 1、错误时间间隔小于1分钟，发送的错误次数达到了阈值10，则进行报警级别刷新，提升报警级别P3，错误次数达到20次，报警提升报警级别P2....
 * 2、每15秒执行一次的定时任务, (前置条件，错误次数满足当前报警级别设置的阈值) 在第一次错误至最后一次错误时间间隔大于等于1分钟时进行第一次报警；在第一次错误至最后一次错误时间间隔大于等于2分钟时进行第二次报警...
 *
 * @author f1ybear_wang  2022/3/3 3:18 下午
 */
public class GatherRuleThresholdTime extends AbstractGatherRuleThreshold {

    public GatherRuleThresholdTime() {
        super();
    }

    @Override
    public boolean isCanSendReport() {
        if (this.startDate == null || this.lastDate == null) {
            return false;
        }

        if (this.getCount() < ZeusContext.getContext().getThresholdNumber(this.levelEnum)) {
            return false;
        }

        if ((System.currentTimeMillis() - this.startDate) >= ((long)(this.sendSuccessCount.get() + 1)
            * TimeUtils.minuteToMilliseconds(ZeusContext.getContext().getThresholdTime()))) {
            return true;
        }
        return false;
    }

}
